Source:SLASH'EM 0.0.7E7F2/objclass.h
Below is the full text to objclass.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/objclass.h#line123]], for example. The latest source code for vanilla NetHack is at Source code. 1. /* SCCS Id: @(#)objclass.h 3.4 1996/06/16 */ 2. /* Copyright © Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef OBJCLASS_H 6. #define OBJCLASS_H 7. 8. /* definition of a class of objects */ 9. 10. struct objclass { 11. short oc_name_idx; /* index of actual name */ 12. short oc_descr_idx; /* description when name unknown */ 13. char * oc_uname; /* called by user */ 14. Bitfield(oc_name_known,1); 15. Bitfield(oc_merge,1); /* merge otherwise equal objects */ 16. Bitfield(oc_uses_known,1); /* obj->known affects full decription */ 17. /* otherwise, obj->dknown and obj->bknown */ 18. /* tell all, and obj->known should always */ 19. /* be set for proper merging behavior */ 20. Bitfield(oc_pre_discovered,1); /* Already known at start of game; */ 21. /* won't be listed as a discovery. */ 22. Bitfield(oc_magic,1); /* inherently magical object */ 23. Bitfield(oc_charged,1); /* may have +n or (n) charges */ 24. Bitfield(oc_unique,1); /* special one-of-a-kind object */ 25. Bitfield(oc_nowish,1); /* cannot wish for this object */ 26. 27. Bitfield(oc_big,1); 28. #define oc_bimanual oc_big /* for weapons & tools used as weapons */ 29. #define oc_bulky oc_big /* for armor */ 30. Bitfield(oc_tough,1); /* hard gems/rings */ 31. 32. Bitfield(oc_dir,3); 33. #define NODIR 1 /* for wands/spells: non-directional */ 34. #define IMMEDIATE 2 /* directional */ 35. #define RAY 3 /* zap beams */ 36. 37. #define PIERCE 1 /* for weapons & tools used as weapons */ 38. #define SLASH 2 /* (latter includes iron ball & chain) */ 39. #define EXPLOSION 4 /* (rockets, grenades) */ 40. #define WHACK 0 41. 42. Bitfield(oc_material,5); 43. #define LIQUID 1 /* currently only for venom */ 44. #define WAX 2 45. #define VEGGY 3 /* foodstuffs */ 46. #define FLESH 4 /* ditto */ 47. #define PAPER 5 48. #define CLOTH 6 49. #define LEATHER 7 50. #define WOOD 8 51. #define BONE 9 52. #define DRAGON_HIDE 10 /* not leather! */ 53. #define IRON 11 /* Fe - includes steel */ 54. #define METAL 12 /* Sn, &c. */ 55. #define COPPER 13 /* Cu - includes brass */ 56. #define SILVER 14 /* Ag */ 57. #define GOLD 15 /* Au */ 58. #define PLATINUM 16 /* Pt */ 59. #define MITHRIL 17 60. #define PLASTIC 18 61. #define GLASS 19 62. #define GEMSTONE 20 63. #define MINERAL 21 64. 65. #define is_organic(otmp) (objects(otmp)->otyp.oc_material <= WOOD) 66. #define is_metallic(otmp) (objects(otmp)->otyp.oc_material >= IRON && \ 67. objects(otmp)->otyp.oc_material <= MITHRIL) 68. 69. /* primary damage: fire/rust/--- */ 70. /* is_flammable(otmp), is_rottable(otmp) in mkobj.c */ 71. #define is_rustprone(otmp) (objectsotmp->otyp.oc_material IRON) 72. 73. /* secondary damage: rot/acid/acid */ 74. #define is_corrodeable(otmp) (objectsotmp->otyp.oc_material COPPER || objectsotmp->otyp.oc_material IRON) 75. 76. #define is_damageable(otmp) (is_rustprone(otmp) || is_flammable(otmp) || \ 77. is_rottable(otmp) || is_corrodeable(otmp)) 78. 79. schar oc_subtyp; 80. /* Bitfield(oc_subtyp,3);*/ /* Now too big for a bitfield */ 81. #define oc_skill oc_subtyp /* for weapons, spellbooks, tools, gems */ 82. #define oc_armcat oc_subtyp /* for armor */ 83. #define ARM_SHIELD 1 /* needed for special wear function */ 84. #define ARM_HELM 2 85. #define ARM_GLOVES 3 86. #define ARM_BOOTS 4 87. #define ARM_CLOAK 5 88. #define ARM_SHIRT 6 89. #define ARM_SUIT 0 90. 91. uchar oc_oprop; /* property (invis, &c.) conveyed */ 92. char oc_class; /* object class */ 93. schar oc_delay; /* delay when using such an object */ 94. uchar oc_color; /* color of the object */ 95. 96. short oc_prob; /* probability, used in mkobj() */ 97. unsigned short oc_weight; /* encumbrance (1 cn = 0.1 lb.) */ 98. short oc_cost; /* base cost in shops */ 99. /* Check the AD&D rules! The FIRST is small monster damage. */ 100. /* for weapons, and tools, rocks, and gems useful as weapons */ 101. schar oc_wsdam, oc_wldam; /* max small/large monster damage */ 102. #define oc_range oc_wsdam /* for strength independant ranged weapons */ 103. #define oc_rof oc_wldam /* rate of fire bonus for ranged weapons */ 104. 105. schar oc_oc1, oc_oc2; 106. #define oc_hitbon oc_oc1 /* weapons: "to hit" bonus */ 107. #define w_ammotyp oc_oc2 /* type of ammo taken by ranged weapon */ 108. #define WP_GENERIC 0 /* all ammo subclasses ok */ 109. #define WP_BULLET 1 110. #define WP_SHELL 2 111. #define WP_ROCKET 3 112. #define WP_GRENADE 4 113. 114. #define a_ac oc_oc1 /* armor class, used in ARM_BONUS in do.c */ 115. #define a_can oc_oc2 /* armor: used in mhitu.c */ 116. #define oc_level oc_oc2 /* books: spell level */ 117. 118. unsigned short oc_nutrition; /* food value */ 119. }; 120. 121. struct objdescr { 122. const char *oc_name; /* actual name */ 123. const char *oc_descr; /* description when name unknown */ 124. }; 125. 126. extern NEARDATA struct objclass objects[]; 127. extern NEARDATA struct objdescr obj_descr[]; 128. 129. /* 130. * All objects have a class. Make sure that all classes have a corresponding 131. * symbol below. 132. */ 133. #define RANDOM_CLASS 0 /* used for generating random objects */ 134. #define ILLOBJ_CLASS 1 135. #define WEAPON_CLASS 2 136. #define ARMOR_CLASS 3 137. #define RING_CLASS 4 138. #define AMULET_CLASS 5 139. #define TOOL_CLASS 6 140. #define FOOD_CLASS 7 141. #define POTION_CLASS 8 142. #define SCROLL_CLASS 9 143. #define SPBOOK_CLASS 10 /* actually SPELL-book */ 144. #define WAND_CLASS 11 145. #define COIN_CLASS 12 146. #define GEM_CLASS 13 147. #define ROCK_CLASS 14 148. #define BALL_CLASS 15 149. #define CHAIN_CLASS 16 150. #define VENOM_CLASS 17 151. #define MAXOCLASSES 18 152. 153. #define ALLOW_COUNT (MAXOCLASSES+1) /* Can be used in the object class */ 154. #define ALL_CLASSES (MAXOCLASSES+2) /* input to getobj(). */ 155. #define ALLOW_NONE (MAXOCLASSES+3) /* */ 156. #define ALLOW_FLOOROBJ (MAXOCLASSES+4) /* */ 157. #define ALLOW_THISPLACE (MAXOCLASSES+5) /* */ 158. 159. #define BURNING_OIL (MAXOCLASSES+1) /* Can be used as input to explode. */ 160. #define MON_EXPLODE (MAXOCLASSES+2) /* Exploding monster (e.g. gas spore) */ 161. 162. #if 0 /* moved to decl.h so that makedefs.c won't see them */ 163. extern const char def_oc_symsMAXOCLASSES; /* default class symbols */ 164. extern uchar oc_symsMAXOCLASSES; /* current class symbols */ 165. #endif 166. 167. /* Default definitions of all object-symbols (must match classes above). */ 168. 169. #define ILLOBJ_SYM ']' /* also used for mimics */ 170. #define WEAPON_SYM ')' 171. #define ARMOR_SYM '172. #define RING_SYM '=' 173. #define AMULET_SYM '"' 174. #define TOOL_SYM '(' 175. #define FOOD_SYM '%' 176. #define POTION_SYM '!' 177. #define SCROLL_SYM '?' 178. #define SPBOOK_SYM '+' 179. #define WAND_SYM '/' 180. #define GOLD_SYM '$' 181. #define GEM_SYM '*' 182. #define ROCK_SYM '`' 183. #define BALL_SYM '0' 184. #define CHAIN_SYM '_' 185. #define VENOM_SYM '.' 186. 187. struct fruit { 188. char fname[PL_FSIZ; 189. int fid; 190. struct fruit *nextf; 191. }; 192. #define newfruit() (struct fruit *)alloc(sizeof(struct fruit)) 193. #define dealloc_fruit(rind) free((genericptr_t) (rind)) 194. 195. #define OBJ_NAME(obj) (obj_descr(obj).oc_name_idx.oc_name) 196. #define OBJ_DESCR(obj) (obj_descr(obj).oc_descr_idx.oc_descr) 197. #endif /* OBJCLASS_H */ objclass.h